package com.example.administrator.school.db;

import com.example.administrator.school.App;
import com.example.administrator.school.bean.DaoMaster;
import com.example.administrator.school.bean.DaoSession;
import com.example.administrator.school.bean.MediaBean;
import com.example.administrator.school.bean.MediaBeanDao;

import java.util.List;

/**
 * ----------BigGod be here!----------/
 * ***┏┓******┏┓*********
 * *┏━┛┻━━━━━━┛┻━━┓*******
 * *┃             ┃*******
 * *┃     ━━━     ┃*******
 * *┃             ┃*******
 * *┃  ━┳┛   ┗┳━  ┃*******
 * *┃             ┃*******
 * *┃     ━┻━     ┃*******
 * *┃             ┃*******
 * *┗━━━┓     ┏━━━┛*******
 * *****┃     ┃神兽保佑*****
 * *****┃     ┃代码无BUG！***
 * *****┃     ┗━━━━━━━━┓*****
 * *****┃              ┣┓****
 * *****┃              ┏┛****
 * *****┗━┓┓┏━━━━┳┓┏━━━┛*****
 * *******┃┫┫****┃┫┫********
 * *******┗┻┛****┗┻┛*********
 * ━━━━━━神兽出没━━━━━━
 * 版权所有：个人
 * 作者：Created by a.wen.
 * 创建时间：2018/9/24
 * Email：13872829574@163.com
 * 内容描述：
 * 修改人：a.wen
 * 修改时间：${DATA}
 * 修改备注：
 * 修订历史：1.0
 */
public class MediaHelper {

    /**
     * 数据库名称
     */
    private static final String DATABASE_NAME = "media_5.db";
    private DaoSession mDaoSession;
    private static MediaHelper instance;

    private MediaHelper() {
        initDaoSession();
    }

    public static MediaHelper getInstance() {
        if (instance == null) {
            synchronized (MediaHelper.class) {
                if (instance == null) {
                    instance = new MediaHelper();
                }
            }
        }
        return instance;
    }

    /**
     * 初始化DaoSession
     * 即获取一个全局的DaoSession实例
     */
    public void initDaoSession() {
        DaoMaster.OpenHelper openHelper = new DaoMaster.DevOpenHelper(App.getAppContext(), DATABASE_NAME, null);
        DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDatabase());
        mDaoSession = daoMaster.newSession();
    }


    /**
     * 插入一条数据
     *
     * @param media
     */
    public void insertData(MediaBean media) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        mediaDao.insert(media);
    }

    /**
     * 删除数据
     */
    public void deleteAll() {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        mediaDao.deleteAll();
    }

    /**
     * 删除数据
     */
    public void delete(MediaBean mediaBean) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        mediaDao.delete(mediaBean);
    }

    /**
     * 更新一条数据
     *
     * @param mediaBean
     */
    public void updateData(MediaBean mediaBean) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        MediaBean media = mediaDao.queryBuilder()
                .where(MediaBeanDao.Properties.Id.eq(mediaBean.getId()))
                .build()
                .unique();
        mediaBean.setId(media.getId());
        mediaDao.update(mediaBean);
    }

    /**
     * 获取全部数据，按照Id升序排列
     *
     * @return 数据列表
     */
    public MediaBean getData(Long id) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        return mediaDao.queryBuilder()
                .where(MediaBeanDao.Properties.Id.eq(id))
                .build()
                .unique();
    }

    /**
     * 获取全部数据，按照Time升序排列
     *
     * @return 数据列表
     */
    public List<MediaBean> getAllData() {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        return mediaDao.queryBuilder()
                .orderAsc(MediaBeanDao.Properties.UploadTime)
                .build()
                .list();
    }

    /**
     * 获取全部数据，按照mediaType 查询
     *
     * @return 数据列表
     */
    public List<MediaBean> getData(int page, int mediaType) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        List<MediaBean> allData = mediaDao
                .queryBuilder()
                .offset(page)
                .limit(10)
                .orderAsc(MediaBeanDao.Properties.UploadTime)
                .where(MediaBeanDao.Properties.MediaType.eq(mediaType))
                .build()
                .list();
        return allData;
    }

    /**
     * 获取全部数据，按照Id升序排列
     *
     * @return 数据列表
     */
    public int getAllSize() {
        List<MediaBean> allData = getAllData();
        return allData == null ? 0 : allData.size();
    }

    /**
     * 获取全部数据，按照mediaType
     *
     * @return 数据列表
     */
    public int getSize(int mediaType) {
        MediaBeanDao mediaDao = mDaoSession.getMediaBeanDao();
        List<MediaBean> allData = mediaDao.queryBuilder()
                .orderAsc(MediaBeanDao.Properties.UploadTime)
                .where(MediaBeanDao.Properties.MediaType.eq(mediaType))
                .build()
                .list();
        return allData == null ? 0 : allData.size();
    }

}
